WebCodecsãæŽ»çšããŠãé«åºŠãªãããªåŠçãã€ãã©ã€ã³ãæ§ç¯ããŸããããVideoFrameã®æäœããšã³ãã³ã¹ã¡ã³ãæè¡ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠåŠã³ãŸãã
WebCodecs VideoFrameãšã³ãã³ã¹ã¡ã³ããã€ãã©ã€ã³ïŒãã«ãã¹ããŒãžãããªåŠç
WebCodecsã¯ããŠã§ãäžã§ã®ã¡ãã£ã¢ã®æ±ãæ¹ã驿°ããŠããŸãããããªãšãªãŒãã£ãªã³ãŒããã¯ãžã®äœã¬ãã«ã¢ã¯ã»ã¹ãæäŸãããã©ãŠã¶å ã§çŽæ¥ã髿§èœã§æŽç·Žãããã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ãäœæããå¯èœæ§ãéããŸããWebCodecsã®æããšããµã€ãã£ã³ã°ãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ã¯ããªã¢ã«ã¿ã€ã ã®ãšã³ãã³ã¹ã¡ã³ãããã£ã«ã¿ãªã³ã°ãåæã®ããã®ã«ã¹ã¿ã ãããªåŠçãã€ãã©ã€ã³ãæ§ç¯ããããšã§ãããã®èšäºã§ã¯ãWebCodecsã䜿çšãããã«ãã¹ããŒãžãããªåŠçãã€ãã©ã€ã³ã®äœæã«ã€ããŠæãäžããäž»èŠãªæŠå¿µãæè¡ãããã³å®è·µçãªèæ ®äºé ãæãäžããŸãã
VideoFrameãšã¯ïŒ
WebCodecsã®äžå¿ã«ã¯ãVideoFrameãªããžã§ã¯ãããããŸããããã¯ããããªããŒã¿ã®åäžãã¬ãŒã ã衚ããã£ã³ãã¹ã®ãããªãã®ã§ããåºç€ãšãªãããŒã¿ãæœè±¡åããåŸæ¥ã®ãããªèŠçŽ ãšã¯ç°ãªããVideoFrameã¯ãã¯ã»ã«ããŒã¿ãžã®çŽæ¥ã¢ã¯ã»ã¹ãæäŸãã现ããã¬ãã«ã§ã®æäœãšåŠçãå¯èœã«ããŸãããã®ã¢ã¯ã»ã¹ã¯ãã«ã¹ã¿ã ãããªåŠçãã€ãã©ã€ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
VideoFrameã®äž»ãªç¹åŸŽïŒ
- çã®ãã¯ã»ã«ããŒã¿ïŒç¹å®ã®åœ¢åŒïŒäŸïŒYUVãRGBïŒã®å®éã®ãã¯ã»ã«ããŒã¿ãå«ãŸããŠããŸãã
- ã¡ã¿ããŒã¿ïŒã¿ã€ã ã¹ã¿ã³ãã笊å·åå¹ ã笊å·åé«ããè¡šç€ºå¹ ã衚瀺é«ããè²ç©ºéãªã©ã®æ å ±ãå«ãŸããŠããŸãã
- 転éå¯èœïŒã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåéããŸãã¯ã¡ã€ã³ã¹ã¬ããå€ã®åŠçã®ããã«Web Workerã«å¹ççã«è»¢éã§ããŸãã
- éãå¯èœïŒãªãœãŒã¹ãªãŒã¯ãé²ãããã«ãæç€ºçã«éããå¿ èŠããããŸãã
ãã«ãã¹ããŒãžãããªåŠçãã€ãã©ã€ã³ã®æ§ç¯
ãã«ãã¹ããŒãžãããªåŠçãã€ãã©ã€ã³ã«ã¯ããããªãšã³ãã³ã¹ã¡ã³ãããã»ã¹ããäžé£ã®åå¥ã®ã¹ããããŸãã¯ã¹ããŒãžã«åå²ããããšãå«ãŸããŸããåã¹ããŒãžã¯ãVideoFrameã«å¯ŸããŠããã£ã«ã¿ã®é©çšãæããã®èª¿æŽããšããžã®æ€åºãªã©ãç¹å®ã®å€æãå®è¡ããŸãã1ã€ã®ã¹ããŒãžã®åºåãæ¬¡ã®ã¹ããŒãžã®å
¥åãšãªããäžé£ã®æäœãäœæãããŸãã
ãããªåŠçãã€ãã©ã€ã³ã®å žåçãªæ§é ã¯æ¬¡ã®ãšããã§ãã
- å
¥åã¹ããŒãžïŒã«ã¡ã©ã¹ããªãŒã ïŒ
getUserMediaïŒããããªãã¡ã€ã«ããŸãã¯ãªã¢ãŒãã¹ããªãŒã ãªã©ããœãŒã¹ããçã®ãããªããŒã¿ãåä¿¡ããŸãããã®å ¥åãVideoFrameãªããžã§ã¯ãã«å€æããŸãã - åŠçã¹ããŒãžïŒç¹å®ã®ãããªå€æãå®è¡ããäžé£ã®ã¹ããŒãžããããã«ã¯ä»¥äžãå«ãŸããŸãã
- è²è£æ£ïŒæãããã³ã³ãã©ã¹ãã圩床ãè²çžã®èª¿æŽã
- ãã£ã«ã¿ãªã³ã°ïŒãŒãããé®®éåããŸãã¯ãšããžæ€åºãã£ã«ã¿ã®é©çšã
- ãšãã§ã¯ãïŒã»ãã¢ããŒã³ãã°ã¬ãŒã¹ã±ãŒã«ããŸãã¯è²ã®å転ãªã©ã®èŠèŠå¹æã®è¿œå ã
- åæïŒãªããžã§ã¯ãæ€åºãã¢ãŒã·ã§ã³ãã©ããã³ã°ãªã©ã®ã³ã³ãã¥ãŒã¿ããžã§ã³ã¿ã¹ã¯ã®å®è¡ã
- åºåã¹ããŒãžïŒåŠçããã
VideoFrameãåãåãããã£ã¹ãã¬ã€ïŒäŸïŒ<canvas>èŠçŽ ïŒã«ã¬ã³ããªã³ã°ããããä¿åãŸãã¯éä¿¡ã®ããã«ãšã³ã³ãŒãããŸãã
äŸïŒåçŽãª2ã¹ããŒãžãã€ãã©ã€ã³ïŒã°ã¬ãŒã¹ã±ãŒã«ãšæãã調æŽïŒ
ãããããããªãã¬ãŒã ãã°ã¬ãŒã¹ã±ãŒã«ã«å€æããŠããæããã調æŽãããšãã2ã€ã®ã¹ããŒãžãå«ãç°¡åãªäŸã§èª¬æããŸãããã
ã¹ããŒãž1ïŒã°ã¬ãŒã¹ã±ãŒã«å€æ
ãã®ã¹ããŒãžã§ã¯ãã«ã©ãŒVideoFrameãã°ã¬ãŒã¹ã±ãŒã«ã«å€æããŸãã
async function toGrayscale(frame) {
const width = frame.codedWidth;
const height = frame.codedHeight;
const bitmap = await createImageBitmap(frame);
const canvas = new OffscreenCanvas(width, height);
const ctx = canvas.getContext('2d');
ctx.drawImage(bitmap, 0, 0);
const imageData = ctx.getImageData(0, 0, width, height);
const data = imageData.data;
for (let i = 0; i < data.length; i += 4) {
const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
data[i] = avg; // Red
data[i + 1] = avg; // Green
data[i + 2] = avg; // Blue
}
ctx.putImageData(imageData, 0, 0);
bitmap.close();
frame.close();
return new VideoFrame(canvas.transferToImageBitmap(), { timestamp: frame.timestamp });
}
ã¹ããŒãž2ïŒæãã調æŽ
ãã®ã¹ããŒãžã§ã¯ãã°ã¬ãŒã¹ã±ãŒã«VideoFrameã®æããã調æŽããŸãã
async function adjustBrightness(frame, brightness) {
const width = frame.codedWidth;
const height = frame.codedHeight;
const bitmap = await createImageBitmap(frame);
const canvas = new OffscreenCanvas(width, height);
const ctx = canvas.getContext('2d');
ctx.drawImage(bitmap, 0, 0);
const imageData = ctx.getImageData(0, 0, width, height);
const data = imageData.data;
for (let i = 0; i < data.length; i += 4) {
data[i] = Math.max(0, Math.min(255, data[i] + brightness)); // Red
data[i + 1] = Math.max(0, Math.min(255, data[i + 1] + brightness)); // Green
data[i + 2] = Math.max(0, Math.min(255, data[i + 2] + brightness)); // Blue
}
ctx.putImageData(imageData, 0, 0);
bitmap.close();
frame.close();
return new VideoFrame(canvas.transferToImageBitmap(), { timestamp: frame.timestamp });
}
ãã€ãã©ã€ã³ã®çµ±å
å®å šãªãã€ãã©ã€ã³ã«ã¯ããããªãã¬ãŒã ã®ååŸãã°ã¬ãŒã¹ã±ãŒã«å€æã«ããåŠçãæ¬¡ã«æãã調æŽã«ããåŠçãæåŸã«ãã£ã³ãã¹ãžã®ã¬ã³ããªã³ã°ãå«ãŸããŸãã
async function processVideoFrame(frame) {
let grayscaleFrame = await toGrayscale(frame);
let brightenedFrame = await adjustBrightness(grayscaleFrame, 50); // Example brightness adjustment
// Render the brightenedFrame to the canvas
renderFrameToCanvas(brightenedFrame);
brightenedFrame.close();
}
éèŠïŒã¡ã¢ãªãªãŒã¯ãé²ãããã«ãVideoFrameãªããžã§ã¯ããšImageBitmapãªããžã§ã¯ãã¯åžžã«close()ããããšãå¿ããªãã§ãã ããïŒ
WebCodecsãã€ãã©ã€ã³ãæ§ç¯ããããã®éèŠãªèæ ®äºé
å¹ççã§å ç¢ãªWebCodecsãã€ãã©ã€ã³ãæ§ç¯ããã«ã¯ãããã€ãã®èŠçŽ ãæ éã«èæ ®ããå¿ èŠããããŸãã
1. ããã©ãŒãã³ã¹ã®æé©å
ãããªåŠçã¯èšç®éçŽçã«ãªãå¯èœæ§ããããŸãã以äžã«æé©åæè¡ã瀺ããŸãã
- ã¡ã€ã³ã¹ã¬ããå€åŠçïŒWeb Workerã䜿çšããŠãèšç®éã®å€ãã¿ã¹ã¯ãã¡ã€ã³ã¹ã¬ããããç§»åããUIã®ãããã¯ãé²ããŸãã
- ã¡ã¢ãªç®¡çïŒäœ¿çšåŸããã«
VideoFrameããã³ImageBitmapãªããžã§ã¯ããéããããšã§ãã¡ã¢ãªãæ³šææ·±ã管çããŸããäžèŠãªãªããžã§ã¯ãäœæãé¿ããŠãã ããã - ã¢ã«ãŽãªãºã ã®éžæïŒãããªåŠçã¿ã¹ã¯ã«ã¯ãå¹ççãªã¢ã«ãŽãªãºã ãéžæããŠãã ãããããšãã°ãè²å€æã«ã«ãã¯ã¢ããããŒãã«ã䜿çšãããšããã¯ã»ã«ããšã®èšç®ãããé«éã«ãªãå ŽåããããŸãã
- ãã¯ãã«åïŒSIMDïŒïŒSIMDïŒSingle Instruction, Multiple DataïŒåœä»€ã䜿çšããŠãè€æ°ã®ãã¯ã»ã«ã§åæã«èšç®ã䞊ååããããšãæ€èšããŠãã ãããäžéšã®JavaScriptã©ã€ãã©ãªã¯ãSIMDæ©èœãæäŸããŠããŸãã
- ãã£ã³ãã¹ã®æé©åïŒã¡ã€ã³ã¹ã¬ããã®ãããã¯ãåé¿ããããã«ãã¬ã³ããªã³ã°ã«OffscreenCanvasã䜿çšããããšãæ€èšããŠãã ããããã£ã³ãã¹æç»æäœãæé©åããŸãã
2. ãšã©ãŒåŠç
ã³ãŒããã¯ãšã©ãŒãç¡å¹ãªå ¥åããŒã¿ããªãœãŒã¹æ¯æžãªã©ã®æœåšçãªåé¡ãé©åã«åŠçããããã«ãå ç¢ãªãšã©ãŒåŠçãå®è£ ããŸãã
- Try-Catchãããã¯ïŒãããªåŠçäžã«çºçããå¯èœæ§ã®ããäŸå€ããã£ããããããã«ã
try...catchãããã¯ã䜿çšããŸãã - Promiseã®æåŠåŠçïŒéåææäœã§promiseã®æåŠãé©åã«åŠçããŸãã
- ã³ãŒããã¯ãµããŒãïŒãããªã®ãã³ãŒããŸãã¯ãšã³ã³ãŒãã詊ã¿ãåã«ãã³ãŒããã¯ãµããŒãã確èªããŠãã ããã
3. ã³ãŒããã¯ã®éžæ
ã³ãŒããã¯ã®éžæã¯ãç®çã®ãããªå質ãå§çž®çããã©ãŠã¶ã®äºææ§ãªã©ã®èŠå ã«ãã£ãŠç°ãªããŸããWebCodecsã¯ãVP8ãVP9ãAV1ãªã©ã®ããŸããŸãªã³ãŒããã¯ããµããŒãããŠããŸãã
- ãã©ãŠã¶ã®äºææ§ïŒéžæããã³ãŒããã¯ãã¿ãŒã²ãããã©ãŠã¶ã§ãµããŒããããŠããããšã確èªããŠãã ããã
- ããã©ãŒãã³ã¹ïŒã³ãŒããã¯ããšã«ããã©ãŒãã³ã¹ç¹æ§ãç°ãªããŸããã¢ããªã±ãŒã·ã§ã³ã«æé©ãªã³ãŒããã¯ãèŠã€ããããã«å®éšããŠãã ããã
- å質ïŒã³ãŒããã¯ãéžæãããšãã¯ãç®çã®ãããªå質ãèæ ®ããŠãã ãããé«å質ã®ã³ãŒããã¯ã»ã©ãéåžžãããå€ãã®åŠçèœåãå¿ èŠã§ãã
- ã©ã€ã»ã³ã¹ïŒããŸããŸãªã³ãŒããã¯ã®ã©ã€ã»ã³ã¹ã®åœ±é¿ã«æ³šæããŠãã ããã
4. ãã¬ãŒã ã¬ãŒããšã¿ã€ãã³ã°
ã¹ã ãŒãºãªãããªåçã«ã¯ãäžè²«ãããã¬ãŒã ã¬ãŒããç¶æããããšãäžå¯æ¬ ã§ããWebCodecsã¯ããããªåŠçã®ãã¬ãŒã ã¬ãŒããšã¿ã€ãã³ã°ãå¶åŸ¡ããããã®ã¡ã«ããºã ãæäŸããŸãã
- ã¿ã€ã ã¹ã¿ã³ãïŒ
VideoFrameã®timestampããããã£ã䜿çšããŠããããªåŠçããããªã¹ããªãŒã ãšåæãããŸãã - RequestAnimationFrameïŒ
requestAnimationFrameã䜿çšããŠããã©ãŠã¶ã«æé©ãªãã¬ãŒã ã¬ãŒãã§ã¬ã³ããªã³ã°æŽæ°ãã¹ã±ãžã¥ãŒã«ããŸãã - ãã¬ãŒã ã®ããããïŒåŠçãã€ãã©ã€ã³ãåä¿¡ãã¬ãŒã ã¬ãŒãã«è¿œãã€ããªãå Žåã«ããã¬ãŒã ããããæŠç¥ãå®è£ ããŸãã
5. åœéåãšããŒã«ãªãŒãŒã·ã§ã³
ã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã®ãããªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã¯ã以äžãèæ ®ããŠãã ããã
- èšèªãµããŒãïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã§è€æ°ã®èšèªã®ãµããŒããæäŸããŸãã
- æ¥ä»ãšæå»ã®åœ¢åŒïŒãŠãŒã¶ãŒã®ãã±ãŒã«ã«é©åãªæ¥ä»ãšæå»ã®åœ¢åŒã䜿çšããŸãã
- æåçæåæ§ïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšã³ã³ãã³ããèšèšãããšãã¯ãæåçãªéãã«æ³šæããŠãã ããã
6. ã¢ã¯ã»ã·ããªãã£
é害ã®ãããŠãŒã¶ãŒããããªã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
- åå¹ãšãã£ãã·ã§ã³ïŒãããªã«åå¹ãšãã£ãã·ã§ã³ãæäŸããŸãã
- é³å£°è§£èª¬ïŒèŠèŠã³ã³ãã³ãã説æãããããªã®é³å£°è§£èª¬ãæäŸããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒããŒããŒãã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãããã²ãŒãã§ããããã«ããŸãã
- ã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ïŒã¢ããªã±ãŒã·ã§ã³ãã¹ã¯ãªãŒã³ãªãŒããŒãšäºææ§ãããããšã確èªããŸãã
å®éã®ã¢ããªã±ãŒã·ã§ã³
WebCodecsããŒã¹ã®ãããªåŠçãã€ãã©ã€ã³ã«ã¯ãããŸããŸãªã¢ããªã±ãŒã·ã§ã³ããããŸãã
- ãããªäŒè°ïŒãªã¢ã«ã¿ã€ã ã®ãããªãšã³ãã³ã¹ã¡ã³ããèæ¯ãŒãããããã³ãã€ãºãªãã¯ã·ã§ã³ãç §æãèªåçã«èª¿æŽããèæ¯ã«åŸ®åŠãªãŒãããé©çšããŠããŠãŒã¶ãŒã®å€èгãåäžãããæ°ãæ£ãããã®ãæå°éã«æãããããªäŒè°ã·ã¹ãã ãæ³åããŠãã ããã
- ãããªç·šéïŒWebããŒã¹ã®ãããªãšãã£ã¿ãŒã§ã«ã¹ã¿ã ãããªãšãã§ã¯ããšãã£ã«ã¿ãŒãäœæããŸããããšãã°ãWebããŒã¹ã®ãšãã£ã¿ãŒã¯ãWebCodecsãæèŒããé«åºŠãªã«ã©ãŒã°ã¬ãŒãã£ã³ã°ããŒã«ãæäŸãããŠãŒã¶ãŒããã©ãŠã¶å ã§ãããªã®å€èгã埮調æŽã§ããããã«ããŸãã
- ã©ã€ãã¹ããªãŒãã³ã°ïŒã©ã€ããããªã¹ããªãŒã ã«ãªã¢ã«ã¿ã€ã ãšãã§ã¯ããšãªãŒããŒã¬ã€ã远å ããŸãããŠãŒã¶ãŒãæŸéã«åçãã£ã«ã¿ãŒãã¢ãã¡ãŒã·ã§ã³ãªãŒããŒã¬ã€ããŸãã¯ã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ã远å ã§ããã©ã€ãã¹ããªãŒãã³ã°ãã©ãããã©ãŒã ãèããŠã¿ãŠãã ããã
- ã³ã³ãã¥ãŒã¿ããžã§ã³ïŒãã©ãŠã¶ã§ãªã¢ã«ã¿ã€ã ã®ãªããžã§ã¯ãæ€åºãé¡èªèãããã³ãã®ä»ã®ã³ã³ãã¥ãŒã¿ããžã§ã³ã¿ã¹ã¯ãå®è¡ããŸããã»ãã¥ãªãã£ã«ã¡ã©ããã®ãããªã¹ããªãŒã ãåæãããªã¢ã«ã¿ã€ã ã§çãããã¢ã¯ãã£ããã£ãæ€åºããããã«WebCodecsã䜿çšããã»ãã¥ãªãã£ã¢ããªã±ãŒã·ã§ã³ãæ€èšããŠãã ããã
- æ¡åŒµçŸå®ïŒARïŒïŒãããªã¹ããªãŒã ãARãªãŒããŒã¬ã€ãšãšãã§ã¯ãã«çµ±åããŸããWebCodecsã䜿çšããŠãŠãŒã¶ãŒã®ã«ã¡ã©ãããããªããã£ããã£ããä»®æ³ãªããžã§ã¯ãããªã¢ã«ã¿ã€ã ã§ã·ãŒã³ã«ãªãŒããŒã¬ã€ããWebããŒã¹ã®ARã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ããã
- ãªã¢ãŒãã³ã©ãã¬ãŒã·ã§ã³ããŒã«ïŒã¹ãŒããŒè§£å床ãªã©ã®æè¡ã䜿çšããŠãäœåž¯åå¹ ç°å¢ã§ã®ãããªå質ãåäžãããŸããããã¯ãã€ã³ã¿ãŒãããã€ã³ãã©ã¹ãã©ã¯ãã£ãéãããŠããå°åã§ååããŠããã°ããŒãã«ããŒã ã«ç¹ã«åœ¹ç«ã¡ãŸãã
äžçäžã®äŸ
WebCodecsãããªãšã³ãã³ã¹ã¡ã³ããã€ãã©ã€ã³ãããŸããŸãªå°åã§äœ¿çšã§ããå¯èœæ§ã®ããäŸãããã€ãèŠãŠã¿ãŸãããã
- ã¢ãžã¢ïŒåž¯åå¹ ãéãããŠããå°æ¹ã®é éå»çãã©ãããã©ãŒã ã§ã¯ãWebCodecsã䜿çšããŠé éçžè«ã®ãããªå質ãæé©åããå»åž«ãšæ£è éã®æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ã確ä¿ã§ããŸãããã€ãã©ã€ã³ã¯ã垯åå¹ ã®æ¶è²»ãæå°éã«æããªãããéèŠãªè©³çްãåªå ã§ããŸãã
- ã¢ããªã«ïŒæè²ãã©ãããã©ãŒã ã§ã¯ãWebCodecsã䜿çšããŠããªã¢ã«ã¿ã€ã ã®èšèªç¿»èš³ãšç»é¢äžã®æ³šéãåããã€ã³ã¿ã©ã¯ãã£ããªãããªã¬ãã¹ã³ãæäŸãã倿§ãªèšèªã³ãã¥ããã£ã®åŠçãããã¢ã¯ã»ã¹ãããããªã£ãŠããŸãããããªãã€ãã©ã€ã³ã¯ããŠãŒã¶ãŒã®èšèªèšå®ã«åºã¥ããŠåå¹ãåçã«èª¿æŽã§ããŸãã
- ãšãŒãããïŒçŸè¡é€šã§ã¯ãWebCodecsã䜿çšããŠãæ¡åŒµçŸå®èŠçŽ ãåããã€ã³ã¿ã©ã¯ãã£ããªå±ç€ºãäœæãã蚪åè ãæŽå²çå·¥èžåãç°å¢ãããé åçãªæ¹æ³ã§æ¢çŽ¢ã§ããããã«ããããšãã§ããŸãã蚪åè ã¯ãã¹ããŒããã©ã³ã䜿çšããŠå·¥èžåãã¹ãã£ã³ãã远å ã®æ å ±ãšã³ã³ããã¹ããæäŸããARãªãŒããŒã¬ã€ãããªã¬ãŒã§ããŸãã
- åç±³ïŒäŒæ¥ã¯WebCodecsã䜿çšããŠãããå æ¬çãªãããªäŒè°ãã©ãããã©ãŒã ãéçºããèŽèŠé害è åãã®èªåæè©±éèš³ããªã¢ã«ã¿ã€ã ã®æåèµ·ãããªã©ã®æ©èœãæäŸã§ããŸãã
- åç±³ïŒèŸ²å®¶ã¯ãWebCodecsãå©çšãããããªåæãæèŒãããããŒã³ã䜿çšããŠãäœç©ã®å¥åº·ç¶æ ãç£èŠãã害è«ããªã¢ã«ã¿ã€ã ã§æ€åºããããå¹ççã§æç¶å¯èœãªèŸ²æ¥æ £è¡ãå¯èœã«ããããšãã§ããŸããã·ã¹ãã ã¯ãæ é€äžè¶³ãŸãã¯å®³è«ã®çºçé åãç¹å®ããèŸ²å®¶ã«æ¯æ£æªçœ®ãè¬ããããã«èŠåããããšãã§ããŸãã
çµè«
WebCodecsã¯ãWebããŒã¹ã®ã¡ãã£ã¢åŠçã«æ°ããªå¯èœæ§ã®æä»£ãéããŸããVideoFrameã®åãæŽ»çšãããã«ãã¹ããŒãžåŠçãã€ãã©ã€ã³ãæ§ç¯ããããšã«ãããéçºè
ã¯ã以åã¯ãã©ãŠã¶ã§å®çŸã§ããªãã£ãæŽç·Žããããããªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããããã©ãŒãã³ã¹ã®æé©åãšã³ãŒããã¯ã®ãµããŒãã«é¢é£ãã課é¡ã¯ãããŸãããæè»æ§ãã¢ã¯ã»ã·ããªãã£ããªã¢ã«ã¿ã€ã åŠçã®ç¹ã§ãæœåšçãªã¡ãªããã¯èšãç¥ããŸãããWebCodecsãé²åããããåºãæ¡çšãããã«ã€ããŠãWebäžã§ãããªãæäœããæ¹æ³ãå€ãããããã«é©æ°çã§ã€ã³ãã¯ãã®ããã¢ããªã±ãŒã·ã§ã³ãç»å ŽããããšãæåŸ
ã§ããŸãã